package com.websockettest.websocket;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

@Slf4j
@Component
@ServerEndpoint(value="/websocket/{userId}")
public class WebSocketListener {
	//成功建立连接
	@OnOpen
	public void onOpen(Session session, @PathParam("userId") String userId){
		if(!StringUtils.hasText(userId) || "null".equals(userId)){
			return;
		}
		//添加Session
		WebSocketSessionUtils.addSession(userId, session);
        log.info("onOpen：{}", userId);
	}

	// 接收到客户端发来的消息
	@OnMessage
	public void onMessage(Session session, String message) {
		log.info("服务端接收到客户端的消息：{}", message);
		log.info("onMessage：{}", message);
	}
	
	//连接关闭
	@OnClose
	public void onClose(Session session, @PathParam("userId") String userid){
        if(!StringUtils.hasText(userid) || "null".equals(userid)){
            return;
        }
        WebSocketSessionUtils.removeSession(userid);
		log.info("onClose, userid：{}", userid);
	}
	
	//发生错误
	@OnError
	public void onError(Session session, @PathParam("userId") String userid, Throwable error){
        if(StringUtils.isEmpty(userid) || "null".equals(userid)){
            return;
        }
        WebSocketSessionUtils.removeSession(userid);
		log.info("onError, userid：{}", userid);
	}
}
